let nextTodoId = 0
// 定义每个定义用户要触发的行为 一定要返回一个对象
// 并且只有action能干活
export const addTodo = text => ({
  type: 'ADD_TODO',
  id: nextTodoId++,
  text
})
// 使用的es6的方式写函数
export const setVisibilityFilter = (filter) => {
  return ({
    type: 'SET_VISIBILITY_FILTER',
    filter
  })
}

export const toggleTodo = id => ({
  type: 'TOGGLE_TODO',
  id
})

export const VisibilityFilters = {
  SHOW_ALL: 'SHOW_ALL',
  SHOW_COMPLETED: 'SHOW_COMPLETED',
  SHOW_ACTIVE: 'SHOW_ACTIVE'
}

//Action 定义用户要触发的行为，向store传递数据信息，actions和reducer是一一对应的
// Action（普通Action、异步Action）
// 普通Action，本质是JS普通对象
// 异步Action，使用了 Thunk middleware 异步 action
import * as lights from '../constant/ActionTypes'; // 引入常量文件名称而已
// 使用es5的方式写函数
export function changegreen() {
  // return也是dispatch，只不过是被封装了而已，不需要我们来写
  return {
    type: lights.CHANGE_GREEN
  }
  // 同步的你也可以直接这样写也行
  // return (dispatch, getState) => {
  //   dispatch({
  //     type: lights.CHANGE_YELLOW
  //   });
  // }
}
// 定义一个异步请求动作的action
export function changeyellow() {
  // 如果是异步的action，先要返回(dispatch, getState)供异步函数调用，这是redux传递给我们使用的。
  // dispatch相当于回调
  return (dispatch, getState) => {
    // 下面异步请求数据即可，可以自己定请求的插件
    fetch({
        url: 'data',
        type: 'json'
      })
      .then((resp) => {
        console.log(resp);
        // 下面帮我们去找reducers
        dispatch({
          type: lights.CHANGE_YELLOW,
          isLoading: true,
          text: resp
        });
      })
      .fail((err) => {
        console.log("出错" + err);
        dispatch({
          type: lights.CHANGE_YELLOW,
          isLoading: true,
          text: "error"
        });
      });
  }
}

export function changered() {
  return {
    type: lights.CHANGE_RED
  }
}
